3x dotaz od zacatecnika

Otázka od: Milan Ruksak

4. 10. 2002 12:13

Zdravim,
programuji sice dlouho, ale v Delphi jsem zacatecnik (tak se nesmejte). Prosim
o pomoc:

1) Jak se dela spravne globalni promenna v projektu. Vse je v pohode a pak se
zase vyskytne misto, kde uz globalni neni ... !?
2) Procital jsem help, ale nenasel jsem, jak se predava parametr formulari.
Jinymi slovy, potreboval bych zavolat formxxx.show, ale nevim, jak mu predat
parametr
3) Jak mam zaridit, aby v tabulce, kterou vylistuji ve formulari nebylo True a
False, ale cesky Ano a Ne (pripadne neco jineho)

Diky moc, Rooksy

Odpovedá: ing. Jan Fiala

4. 10. 2002 13:50

3.10.2002 Milan Ruksak:
> Zdravim,
> programuji sice dlouho, ale v Delphi jsem zacatecnik (tak se nesmejte).
Prosim o pomoc:

> 1) Jak se dela spravne globalni promenna v projektu. Vse je v pohode
> a pak se zase vyskytne misto, kde uz globalni neni ... !?

Pokud si promennou se stejnym jmenem nadeklarujes uvnitr funkce, bude
platit ta nadeklarovana.
Pokud chces globalni promennou v ramci unity, dej ji do var za
Implementation
Pokud chces globalni promennou v ramci programu, dej ji do sekce
Interface.

Taky lze pouzit public sekci v hlavnim formulari. Pak k promenne
pristupujes pres Form1.promenna

> 2) Procital jsem help, ale nenasel jsem, jak se predava parametr
> formulari. Jinymi slovy, potreboval bych zavolat formxxx.show, ale
> nevim, jak mu predat parametr

Form1Show(Self);
Form1Show(nil);
Na parametru v tomto pripade zalezi, pokud se podle nej ridis v kodu
OnShow.

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

Odpovedá: Petr Vones

4. 10. 2002 13:07

From: "Milan Ruksak" <ruksak@volny.cz>
> Jak se dela spravne globalni promenna v projektu. Vse je v pohode a pak se
> zase vyskytne misto, kde uz globalni neni ... !?

Globalni promenna musi byt v interface casti unitu aby byla pristupna i z
ostatnich unitu. Globalni objekty nebo ruzne dalsi promenne je vhodne umistit
do samostatneho unitu nebo datamodulu (pokud to je mozne).

> Procital jsem help, ale nenasel jsem, jak se predava parametr formulari.
> Jinymi slovy, potreboval bych zavolat formxxx.show, ale nevim, jak mu predat
> parametr

Metoda TForm.Show zadny dalsi parametr nema.

> Jak mam zaridit, aby v tabulce, kterou vylistuji ve formulari nebylo True a
> False, ale cesky Ano a Ne (pripadne neco jineho)

viz TBooleanField.DisplayValues v helpu

Petr Vones

Odpovedá: Lebeda David

4. 10. 2002 13:01

 2) Procital
> jsem help, ale nenasel jsem, jak se predava parametr formulari. Jinymi
> slovy, potreboval bych zavolat formxxx.show, ale nevim, jak mu predat
> parametr

Ahoj,

je nekolik spatnych cest - pres globalni promenne apod. - tomu je treba se
vyhybat z
principialnich duvodu (pouzivani globalnich promennych vede snadno k tomu, ze
kusy programu, ktere maji byt na sobe nezavisle, najednou na sobe zavisi a
velmi
tezko se to pak dohledava. Napr. v jednom miste promennou nejak nastavis, na
druhem miste si to neuvedomis a program pak najednou
"obcas funguje, obcas ne..."

Takze moznosti - zalezi na okolnostech, co je vyhodnejsi:

1) Napsat novy konstruktor s potrebnymi parametry. Pak pri vytvareni formulare
pouzijes:

 with TForm2.Create(Self, hodnota1, hodnota2...) do
 try
  ShowModal;
 finally
  Release;
 end;

To ma vyhodu v tom, ze pujde-li o jediny konstruktor formu (tj. nahradi
implicitni - viz
reintroduce), nelze na predani parametru zapomenout.

2) Je-li pro predani parametru jiz v konstruktoru moc brzy, tj. pouziji-li se
parametry
az v OnShow apod. a i v jinych pripadech, lze pouzit druhou cestu, kterou mam
osobne radsi. S ni realizujes i nepovinne "parametry". Na druhou stranu -
programator neni nucen parametry nastavit a muze na to "zapomenout".

V public sekci formu definujes promenne tvorici parametry, nezapomenout to v
komentari zdokumentovat (co je vstupni, co vystupni, co povinne, co nepovinne
apod.). Pak to pouzijes nejak takto:

 with TForm2.Create(Self) do
 try
  par1 := hodnota1;
  par2 := hodnota2;
  if ShowModal = mrOK then
   Refresh(vraceny parametr z formu2);
 finally
  Release;
 end;

V obou pripadech je maximalne rozumne vypnout v Option Delphi volbu AutoCreate
Forms a formulare tvorit az v okamziku potreby rucne, jak jsem popsal.

Je to to, na co ses ptal?

David Lebeda